#pragma once

#include <vector>
#include <map>

class FrameArray
{
public:
	FrameArray(void);
	~FrameArray(void);
	
	inline void setPageSize( int size ) { _pageSize = size; }
    inline int getPageSize() { return _pageSize; }

    inline void setPageCount( int count ) { _pageCount = count; }
    inline int getPageCount() { return _pageCount; }

    void initialize();

	char* getFrameByValueKey( int valueIndex );
	char* getFrameByIndex( int index );

	char* getNextFreeFrame( int &index );
	void  useFrame( int index, int frameIndex );

    bool addFrame(const char* buf, int valueIndex );
    bool eraseFrame( int valueIndex );
	bool eraseFrameByIndex( int index );

	bool isEmpty(); /*{ return _poolKeys.size() == 0; }*/

	//inline std::vector<int>* getPoolKeys() { return &(_poolKeys); }
	//inline std::map<int, int>* getKeyMap() { return &(_indexKeyMap); }

	inline bool* getFlags() { return _flags; }
	inline int* getIndices() { return _indices; }

	inline int getIndex( int i ) { return _indices[ i ]; }
	inline bool getFlag( int i ) { return _flags[ i ]; }

	void lock();
	void unlock();

	void empty();
private:
    int _pageSize;
    int _pageCount;

	CRITICAL_SECTION _keyCs;
    char* _pool;
   
	//bool* _flags;
	//int* _indices;
	bool _flags[ 50 ];
	int _indices[ 50 ];
};

